package com.nodecollege.cloud.service;

import com.nodecollege.cloud.common.model.ApiDataPower;
import com.nodecollege.cloud.common.model.LoginUser;
import com.nodecollege.cloud.common.model.NCResult;
import com.nodecollege.cloud.common.model.QueryVO;
import com.nodecollege.cloud.common.model.po.UpmsUser;
import com.nodecollege.cloud.common.model.vo.LoginVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * userService
 *
 * @author LC
 * @date 2019/6/13 15:49
 */
public interface UserService {

    /**
     * 查询所有用户
     */
    NCResult<UpmsUser> list(QueryVO<UpmsUser> userQuery);

    /**
     * 根据账号获取用户信息
     *
     * @param account
     */
    UpmsUser getUserByAccount(String account);

    /**
     * 用户注册/保存
     *
     * @param loginVO
     */
    void addUser(LoginVO loginVO);

    /**
     * 更新用户信息
     *
     * @param user
     * @param apiDataPower // 数据权限
     * @return
     */
    void updateUser(UpmsUser user, ApiDataPower apiDataPower);

    /**
     * 删除用户信息
     *
     * @param id
     * @return
     */
    void delUser(Long id, ApiDataPower apiDataPower);

    /**
     * 重置密码
     *
     * @param upmsUser
     * @return
     */
    void resetPwd(UpmsUser upmsUser);

    /**
     * 修改密码，只能当前登陆人修改自己的密码
     *
     * @param userId
     * @param oldPassword
     * @param newPassword
     * @return
     */
    void updatePwd(Long userId, String oldPassword, String newPassword, ApiDataPower apiDataPower);

    /**
     * 切换默认租户
     */
    void changeDefaultTenant(LoginUser loginUser);

    /**
     * 查询用户信息
     *
     * @param queryVO
     * @return
     */
    NCResult<UpmsUser> getUserListByNickname(QueryVO<UpmsUser> queryVO);

    /**
     * 根据用户id查询用户信息
     *
     * @param queryVO
     * @return
     */
    List<UpmsUser> getUserListByQuery(QueryVO queryVO);

    /**
     * 根据用户id获取用户信息
     *
     * @param userId
     * @return
     */
    UpmsUser getUserByUserId(Long userId);

    /**
     * 清除用户缓存
     *
     * @param userId
     */
    void clearUserCache(Long userId);

    /**
     * 上传头像
     */
    UpmsUser uploadAvatar(MultipartFile avatarFile, Long userId);
}
